import { useSaveQuestion } from '../utils/useSaveQuestion';
import { getUserGrade } from '../../../utils/userInfo';
import Toast from '../../../miniprogram_npm/@vant/weapp/toast/toast';
import Dialog from '../../../miniprogram_npm/@vant/weapp/dialog/dialog';
import Notify from '../../../miniprogram_npm/@vant/weapp/notify/notify';
import useFilterText from '../utils/useFilterText'

Page({
  data: {
    words: [], // 识别出来的文字信息
    wordsNum: Number, // 识别出几行文字信息
    imgUrl: String, // 拍照或选择图片生成的base64参数
    textFilterResultObj: Object, // 文字过滤后生成的数组
    showDialog: false, // 控制开启或关闭弹框
    question_type_list: [
      { value: 'choice', text: '选择' },
      { value: 'judgment', text: '判断' },
      { value: 'fill', text: '填空' },
      { value: 'explain', text: '问答' },
      { value: 'other', text: '其他' },
    ],
    question_type: 'other', // 题目类型
    dropdownMenuList: [], // 当前拥有的课程列表
    dropdownMenuValue: 0,
    isNextShowBtn: false, // 是否显示下一步按钮
    className: '', // 选中的课程名
    graspRate: 1, // 掌握程度
    difficultyRate: 1, // 难易度
    isgradeDesc: true, //是否在外面已经选择了年级
  },

  /** 
   * 将图片进行文字识别
  */
  baiduOCR(imageData) {
    const that = this;
    wx.cloud.callFunction({
      name: 'getOCRToken',
      data: {
        APIKEY: "h5gb3dMcRszVWwem8mVg3oCz",
        SECKEY: "ry58r1KBGaqR4gKSVvYMeOYik48nXmom",
      }
    }).then(res1 => {
      wx.showLoading({
        title: '图片识别中...',
      })
      const access_token = res1.result;
      console.log(access_token);
      wx.request({
        url: `https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic?access_token=${access_token}`,
        data: {
          image: imageData
        },
        method: 'POST',
        dataType: 'json',
        header: {
          'content-type': 'application/x-www-form-urlencoded' // 必须的        
        },
        success: (res) => {
          wx.hideLoading();
          console.log(res)
          // console.log('识别后： ' + res.data.words_result)
          const { words_result, words_result_num } = res.data;
          that.setData({
            words: words_result,
            wordsNum: words_result_num
          })
          console.log('文字过滤后', useFilterText(words_result));
          if (words_result_num === 0) {
            Toast.fail('未能识别出有效文字');
          } else {
            Toast.success('识别结果已生成');
            that.setData({
              textFilterResultObj: useFilterText(words_result),
            })
          }
        },
        fail: (res) => {
          wx.hideLoading();
          console.log('get word fail：', res.data);
        }
      })
    })
  },

  /**
   *  点击下一步按钮时触发
   *  弹出弹框，弹框内进行内容确认
   */
  onNext() {
    const that = this;
    console.log(111);
    // 开启弹框
    that.setData({
      showDialog: true,
    });
  },

  /**
   *  关闭弹框
   */
  onDialogClose() {
    this.setData({
      showDialog: false,
    })
  },

  /**
   *  确认弹框，录入题目到数据库
   */
  onDialogConfirm() {
    // 获取 uid 和 gid
    const { _id, uid } = getUserGrade();
    const gid = _id;
    // 获取年级信息
    const gradeDesc = wx.getStorageSync('gradeDesc');
    const { className, question_type, graspRate, difficultyRate, textFilterResultObj } = this.data;
    // 确认题目类型
    const question_type1 = textFilterResultObj.question_type;
    const type = question_type1 === 'null' ? question_type : question_type1;
    const { title, answer } = textFilterResultObj;
    // 根据type，确认不同的 enterObj，主要是区分选择和其他类型的题目
    let enterObj;
    if (type === 'choice') {
      const { option } = textFilterResultObj;
      enterObj = {
        type,
        title, // 题目
        answer, // 答案
        option, // 选项
        graspRate, // 掌握程度
        difficultyRate // 难易度
      };
    } else {
      enterObj = {
        type,
        title, // 题目
        answer, // 答案
        graspRate, // 掌握程度
        difficultyRate // 难易度
      };
    };
    // 进行判断，通过了才能录入数据库
    if (className !== '请选择' && gradeDesc && gid && uid) {
      // 调用云函数，录入
      useSaveQuestion(enterObj, className, gradeDesc, gid, uid);
    } else {
      Toast.fail('出现了数据错误问题，请检查后重新录入');
      this.setData({
        showDialog: false,
      })
    };
  },

  /**
   * 选择题目类型
   * 上拉框内容改变时执行
   */
  onChangeDropdownValue1(e) {
    console.log(e.detail);
    this.setData({
      question_type: e.detail
    })
  },

  /**
   * 选择学科
   * 上拉框内容改变时，显示按钮
   */
  onChangeDropdownValue2(e) {
    const that = this;
    const { dropdownMenuList } = this.data;
    that.setData({
      isNextShowBtn: true,
      className: dropdownMenuList[e.detail].text,
    });
    console.log('className', this.data.className);
  },

  // 掌握程度评分
  onChangeGraspRate(e) {
    this.setData({
      graspRate: e.detail,
    });
    console.log(this.data.graspRate);
  },

  // 难易度评分
  onChangeDifficultyRate(e) {
    this.setData({
      difficultyRate: e.detail,
    });
    console.log(this.data.difficultyRate);
  },

  // 是否在外面选择了年级，没有的话显示警告
  onClassSelect() {
    Notify({ type: 'warning', message: '请先去选择你所在的年级' });
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 接收上个页面传来的 imgUrl
    const { tempFilePath } = options;
    console.log(tempFilePath);
    var that = this;
    // 文字识别
    //根据官方的要求  用base64字符编码获取图片的内容
    wx.getFileSystemManager().readFile({
      filePath: tempFilePath,
      encoding: 'base64',
      success: function (res) {
        console.log('base64', res);
        const imageData = res.data;
        that.setData({
          imgUrl: imageData,
        });
        that.baiduOCR(imageData)
      }
    });
    // 获取当前选中的年级
    const gradeDesc = wx.getStorageSync('gradeDesc');
    if (gradeDesc) {
      // 获取当前年级里，所有的课程信息
      const classArr = wx.getStorageSync('classArr');
      // console.log(classArr);
      let newClassArr = [];
      // 在数组首行加入默认指定项
      const obj = { text: '请选择', value: 0 };
      newClassArr.unshift(obj);
      classArr.forEach((item, index) => {
        newClassArr.push({ text: item.name, value: index + 1 })
      });
      // console.log(newClassArr);
      that.setData({
        dropdownMenuList: [...newClassArr],
      });
      // console.log(that.data.classList);
    } else {
      that.setData({
        isgradeDesc: false,
      });
    }
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})
